package config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.DataSourceUtils;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.support.TransactionSynchronizationManager;

import javax.sql.DataSource;
import java.sql.*;

/**
 * 数据源配置
 */
public class JdbcConfig {

    /**
     * 使用spring的el表达式赋值
     */
    @Value("${jdbc.driver}")
    private String driver;
    /**
     * 使用spring的el表达式赋值
     */
    @Value("${jdbc.url}")
    private String url;
    /**
     * 使用spring的el表达式赋值
     */
    @Value("${jdbc.username}")
    private String username;
    /**
     * 使用spring的el表达式赋值
     */
    @Value("${jdbc.password}")
    private String password;


    /**
     * 创建数据源，并存入IOC容器
     *
     * @return
     */
    @Bean
    public DataSource createDateSource() throws Exception {
       //数据源
//        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        DruidDataSource dataSource=new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
//        //获取连接
//        Connection connection = dataSource.getConnection();
//        //数据库源信息
//        DatabaseMetaData metaData = connection.getMetaData();
//        String databaseProductName = metaData.getDatabaseProductName();
//        //connection.setAutoCommit(false);
//        String sql="";
//        PreparedStatement pre = connection.prepareStatement(sql);
//        //参数源信息
//        ParameterMetaData parameterMetaData = pre.getParameterMetaData();
//        ResultSet resultSet = pre.executeQuery();
//        //结果结源信息
//        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();


        return dataSource;
    }

    /**
     * 创建平台事务管理器器
     * @param dataSource
     * @return
     */
    @Bean
    public PlatformTransactionManager getTransactionManager(@Autowired DataSource dataSource){

        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource);
        return dataSourceTransactionManager;
    }

    /**
     * 创建JdbcTemplate对象操作数据库，并存入IOC容器
     *
     * @return
     */
    @Bean
    public JdbcTemplate createJdbcTemplate(@Autowired DataSource dataSource) {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        return jdbcTemplate;
    }


}
